package com.yxy.ms.manager.config;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;


/**
 * <类描述> 针对myabits对postgresql中json类型不支持的处理器
 * 
 * @author brett
 * @date 2019-8-21 20:03:24
 *
 */
@MappedTypes({ Object.class })
public class JsonTypeHandler extends BaseTypeHandler<Object> {

	public JsonTypeHandler() {
		super();
	}

	/**
	 * java对象转化成json字符串 Title: setNonNullParameter Description:
	 * 
	 * @param ps        PreparedStatement对象
	 * @param i         索引
	 * @param parameter 参数对象
	 * @param jdbcType  数据库支持的类型
	 * @throws SQLException
	 */
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
			throws SQLException {
		PGobject pgobject = new PGobject();
		pgobject.setType("json");
		pgobject.setValue(String.valueOf(parameter));
		ps.setObject(i, pgobject);
	}

	/**
	 * <函数描述>结果集为空返回空字符串
	 * 
	 * @param rs         结果集
	 * @param columnName 列名
	 * @return
	 * @throws SQLException
	 */
	@Override
	public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
		return rs.getString(columnName);
	}

	/**
	 * <函数描述>结果集为空返回空字符串
	 * 
	 * @param rs          结果集
	 * @param columnIndex
	 * @return
	 * @throws SQLException
	 */
	@Override
	public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		return rs.getString(columnIndex);
	}

	/**
	 * <函数描述>结果集为空返回空字符串
	 * 
	 * @param cs          CallableStatement对象
	 * @param columnIndex 列索引
	 * @return
	 * @throws SQLException
	 */
	@Override
	public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		return cs.getString(columnIndex);
	}

}
